草庐IT

Java Generics - 类本身的子类?

全部标签

带有子类参数的Java getMethod

我正在编写一个使用反射来动态查找和调用方法的库。只给定一个对象、一个方法名称和一个参数列表,我需要调用给定的方法,就好像该方法调用已明确写入代码中一样。我一直在使用以下方法,在大多数情况下都有效:staticvoidcallMethod(Objectreceiver,StringmethodName,Object[]params){Class[]paramTypes=newClass[params.length];for(inti=0;i但是,当参数之一是该方法支持的类型之一的子类时,反射API会抛出NoSuchMethodException。例如,如果接收器的类定义了testMeth

Java 多态性使用父类(super class)变量创建子类对象

所以我是一名学生,正在学习Java。有一个概念我很难理解,希望有人能为我阐明这一点。我的问题是关于多态性。比方说我有以下代码。Animala=newLizard("Lizzy",6);//LizardextendsAnimal据我了解,由于变量类型是Animal,a将具有Animal的所有特征。但是,由于创建的对象是Lizard,因此将使用Lizard类中的任何重写方法,而不是Animal类中的方法。这是正确的吗>另外,在创建类时会使用哪些类的构造函数?感谢您的帮助。我看起来很漂亮 最佳答案 1.FromwhatIunderstan

java - 什么是将 2 个类合并为 1 个类,其中一个类是另一个类的子类?

我有:一个抽象类A一个扩展A的抽象类B除B外没有其他扩展A的类扩展B的其他类为了减少类的数量,我希望将A和B合并为一个类,并让其他类从新合并的类扩展。这次重构的名称是什么?附言在我的实现中,它是用Java实现的,这个重构可以在IntelliJ中自动完成吗? 最佳答案 IntelliJ的内联父类(superclass)执行父类(superclass)到子类的合并。InlineSuperclass 关于java-什么是将2个类合并为1个类,其中一个类是另一个类的子类?,我们在StackOve

Java:子类化泛型类

我有一个通用类,我希望按如下方式对其进行子类化:publicclassSomeTableextendsBaseTable{publicSomeTable(introws,intcols){super(rows,cols,SomeTableEntry.class);//Doesnotcompile://Cannotfindsymbol:constructorBaseTable(int,int,java.lang.Class)}}...通用父类(superclass)是:publicclassBaseTable{publicBaseTable(introws,intcols,Classcl

java - 从扩展外部类本身的内部类中访问外部类成员

在下面显示的代码片段中,一个内部类继承了一个外部类本身。packagetest;classTestInnerClass{privateStringvalue;publicTestInnerClass(Stringvalue){this.value=value;}privateStringgetValue(){returnvalue;}publicvoidcallShowValue(){newInnerClass("Anothervalue").showValue();}privatefinalclassInnerClassextendsTestInnerClass{publicInne

java - 为什么 Java multi-catch 不能处理通过子类关联的类型?

这是一段不能编译的代码:voidmultiCatch(){try{throwIOFile();}//FileNotFoundExceptionextendsIOException,hencethis//doesnotcompile("alternatives"relatedbysubclassing):catch(IOException|FileNotFoundExceptione){}}voidthrowIOFile()throwsIOException,FileNotFoundException{}如果没有通过子类关联异常类型,一切都像魅力一样。如果您将我的代码片段中的IOExce

java - 在调用父类(super class)的构造函数之前,有什么方法可以在 Java 中初始化子类的成员变量?

我需要这个,因为父类(superclass)中的构造函数正在调用一个在子类中被覆盖的方法。该方法返回一个值,该值传递给子类的构造函数。但是父类(superclass)构造函数必须在子类构造函数之前调用,所以我没有机会保存传入的值。 最佳答案 从父类(superclass)构造函数调用重写的方法根本行不通-不要这样做父类(superclass)构造函数必须始终在子类构造函数之前完成。当父类(superclass)构造函数正在执行时,所讨论的对象是父类(superclass)的(半初始化)实例,而不是子类!因此,如果您尝试从构造函数调用

java - 为什么 List<Number> 不是 List<Object> 的子类型?

publicvoidwahey(Listlist){}wahey(newLinkedList());对该方法的调用不会进行类型检查。我什至无法按如下方式转换参数:wahey((List)newLinkedList());根据我的研究,我发现不允许这样做的原因是类型安全。如果允许我们执行上述操作,那么我们可以拥有以下内容:Listld;wahey(ld);在wahey方法中,我们可以将一些字符串添加到输入列表中(因为参数维护着一个List引用)。现在,在方法调用之后,ld引用类型为List的列表。,但实际列表包含一些String对象!这似乎与没有泛型的Java正常工作方式不同。例如:Ob

java - 使用父类(super class) "protected final"方法为子类保留公共(public)代码

作为一个(迂腐的)初学者Java程序员,我想知道,将所有子类使用的公共(public)代码块移动到单独的protected(final)父类中的方法?诸如用通用值填充列表或通用过滤算法等任务...是否也可以使用protected静态方法?classA{protectedfinalListgetVariants(){...}protectedfinalListfilterResults(Listvariants){...}}classBextendsA{publicListdoSomethingUsefull(){ListcommonVariants=getVariants();...r

java - 在 java 中,我们可以将父类(super class)对象传递给子类引用吗?

在java中,我们可以将父类(superclass)对象传递给子类引用吗?我知道这是一个奇怪的问题/实际上不可行,但我想了解这背后的逻辑为什么在java中不允许。classEmployee{publicvoidmet1(){System.out.println("met1");}}classSalesPersonextendsEmployee{@Overridepublicvoidmet1(){System.out.println("newmet1");}publicvoidmet2(){System.out.println("met2");}}publicclassReference